# class Dog:
#     name = "波斯猫"
#     age = 2
#
#     def info(self, name):
#         print("name:", name)
#         # 通过self.属性名可以访问对象的属性 就是Java中的this
#         print("name:", self.name)
#
#
# dog = Dog()
# dog.info("加菲猫")


# class Dog:
#     name = "哈士奇"
#     age = 2
#
#     def info(self, name):
#         print("name:", name)
#
#     @staticmethod
#     # 1.加上该注解可以把普通方法变成静态方法
#     # 2.如果是静态方法，就不用加self
#     # 3.调用静态方法，不需要创建对象，直接调用类名.方法名() 也可以创建对象在访问静态方法(不推荐这种方式)
#     def ok():
#         print("ok")
#
#
# dog = Dog()
# dog.info("狗")
# # 调用静态方法
# Dog.ok()


# self表示i当前对象本身，谁调用，self就是谁
class Dog:
    # 定义一个名为Dog的类
    name = "哈士奇"  # 类变量，表示狗的品种
    age = 2  # 类变量，表示狗的年龄

    def hi(self):
        print("self:", id(self))  # 打印出self对象的内存地址


dog2 = Dog()  # 创建Dog类的一个实例，赋值给dog2
print(f"dog2: {id(dog2)}")  # 打印出dog2实例的内存地址
dog2.hi()  # 调用dog2实例的hi方法


class Dog:
    # 定义一个名为Dog的类
    name = "哈士奇"  # 类变量，表示狗的品种
    age = 2  # 类变量，表示狗的年龄

    def hi(self):
        print("self:", id(self))  # 打印出self对象的内存地址

    def ok(self):
        print("ok")
        # hi() 不能直接调用
        self.hi()  # 需要通过self调用
